package com.koron.common.core.business.workflow.util;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 字符串工具类
 *
 * @author jzp
 * @since 2021/1/14 16:50
 */
public class TextUtil {

    /***
     * 下划线命名转为驼峰命名
     *  a_b -> aB
     * @param para 下划线命名的字符串
     */
    public static String UnderlineToHump(String para){
        StringBuilder result=new StringBuilder();
        String[] a=para.split("_");
        for(String s:a){
            if (!para.contains("_")) {
                result.append(s);
                continue;
            }
            if(result.length()==0){
                result.append(s.toLowerCase());
            }else{
                result.append(s.substring(0, 1).toUpperCase());
                result.append(s.substring(1).toLowerCase());
            }
        }
        return result.toString();
    }

    /***
     * 下划线命名转为驼峰命名
     * 首字母全大写
     * a_b -> AB
     * @param para 下划线命名的字符串
     */
    public static String UnderlineToUpperHump(String para){
        StringBuilder result=new StringBuilder();
        String[] a=para.split("_");
        for(String s:a){
            if (!para.contains("_")) {
                result.append(s);
                continue;
            }
            result.append(s.substring(0, 1).toUpperCase());
            result.append(s.substring(1).toLowerCase());
        }
        return result.toString();
    }



    /***
     * 驼峰命名转为下划线命名
     *
     * @param para 驼峰命名的字符串
     */
    public static String HumpToUnderline(String para){
        StringBuilder sb=new StringBuilder(para);
        int temp=0;//定位
        if (!para.contains("_")) {
            for(int i=0;i<para.length();i++){
                if(Character.isUpperCase(para.charAt(i))){
                    sb.insert(i+temp, "_");
                    temp+=1;
                }
            }
        }
        return sb.toString().toLowerCase();
    }

    public static Map<String, String> toMapFromString(String formVariables) {
        HashMap<String, String> formVariablesMap = new HashMap<>();

        if (StringUtils.isNotEmpty(formVariables)) {
            Map<String, Object> map = JSONObject.parseObject(formVariables);
            formVariablesMap = new HashMap<>();
            String value = null;
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                value = entry.getValue() == null ? null : entry.getValue().toString();
                formVariablesMap.put(entry.getKey(), value);
            }
        }
        return formVariablesMap;
    }

    public static List<JSONObject> toListMapFromString(String str) {
        List<JSONObject> res = new ArrayList<>();
        JSONArray json = JSONArray.parseArray(str);
        for(int i = 0; i < json.size(); i++) {
            res.add(json.getJSONObject(i));
        }
        return res;
    }


}
